package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.gammeproduit.AppelOffre;
import com.tabnet.dao.DAOAppelOffre;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.form.ModificationAppelOffreForm;

/**
 * Servlet qui s'occupe de modifier un appel d'offre
 *
 */
public class ModificationAppelOffre extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
    public static final String ATT_APPEL       	 	= "appelOffre";
    public static final String ATT_FORM         	= "form";
    public static final String SESSION_APPELS      	= "appelsOffre";
    public static final String GET					= "ref";
    public static final String VUE_SUCCES      		= "/admin/listeAppelOffre.jsp";
    public static final String VUE_FORM        		= "/admin/modifierAppelOffre.jsp";
    
    private DAOAppelOffre appelDao;

    @SuppressWarnings("unchecked")
	public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* À la réception d'une requête GET, affichage du formulaire avec les infos de l'appel d'offre */
    	HttpSession session = request.getSession();
    	
    	// récupération de la collection
        HashMap<String, AppelOffre> lesAppels = (HashMap<String, AppelOffre>) session.getAttribute( SESSION_APPELS );
        // récupération de la référence et de l'objet à modifier
        String ref = (String) request.getParameter(GET);
        AppelOffre appel = lesAppels.get(ref);
    	
        // transmission des données
    	request.setAttribute( ATT_APPEL, appel);
        this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response );
    }

    @SuppressWarnings("unchecked")
	public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
    	try {
			this.appelDao = DAOFactory.getInstance().getAppelOffreDAO();
		} catch (DAOException e1) {
			e1.printStackTrace();
		}

        // récupération de la map des appels d'offre dans la session
        HttpSession session = request.getSession();
        HashMap<String, AppelOffre> lesAppels = (HashMap<String, AppelOffre>) session.getAttribute( SESSION_APPELS );
        
        // récupération des informations postées
        String ref = request.getParameter("ref");
        AppelOffre appelOffre = lesAppels.get(ref);
        
        ModificationAppelOffreForm form = new ModificationAppelOffreForm(appelDao);
        appelOffre = form.modifierAppelOffre( request, appelOffre );

        //Si aucune erreur 
        if ( form.getErreurs().isEmpty() ) {
            /* Puis ajout de l'appel courant dans la map */
            lesAppels.put( appelOffre.getRef(), appelOffre );
            
            /* Et enfin (ré)enregistrement de la map en session */
            session.setAttribute( SESSION_APPELS, lesAppels );
 
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        } else {
        	request.setAttribute( ATT_APPEL, appelOffre );
            // Sinon, ré-affichage du formulaire de modification avec les erreurs 
            this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response );
        }
    }
}
